package cn.xchats.rpc.server;

import io.netty.channel.ChannelInitializer;
import io.netty.channel.socket.SocketChannel;
import io.netty.handler.codec.serialization.ClassResolvers;
import io.netty.handler.codec.serialization.ObjectDecoder;
import io.netty.handler.codec.serialization.ObjectEncoder;

/*
 *对象编解码器
 *@author teddy
 *@date 2018/7/4
 */
public class ServerObjectCodecHandler extends ChannelInitializer<SocketChannel>{

    @Override
    protected void initChannel(SocketChannel channel) throws Exception {
        //添加对象解码器 负责对序列化POJO对象进行解码 设置对象序列化最大长度为1M 防止内存溢出
        //设置线程安全的WeakReferenceMap对类加载器进行缓存 支持多线程并发访问防止内存溢出
        channel.pipeline().addLast(new ObjectDecoder(1024*1024, ClassResolvers.weakCachingConcurrentResolver(this.getClass().getClassLoader())));
        //添加对象编码器 在服务器对外发送消息的时候自动将实现序列化的POJO对象编码
        channel.pipeline().addLast(new ObjectEncoder());
        //处理网络IO  自己配置的处理器
        channel.pipeline().addLast(new TcpServerHander());
    }
}
